package com.itheima.exception;

import com.itheima.common.R;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.sql.SQLIntegrityConstraintViolationException;

/*
    这是全局异常处理器：
        1. 专门用来处理没有在controller里面捕捉的异常。
        2. 在这里处理一些共性异常： 唯一性约束异常
 */
@RestControllerAdvice
public class GlobalExceptionHandler {


    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    public R handleSQLIntegrityConstraintViolationException(SQLIntegrityConstraintViolationException e){

        //1. 打印异常信息到控制台上 【真实的场景，应该是： 保存到日志文件中】
        e.printStackTrace();

        //2. 发短信、发邮件，通知运维或者开发人员。

        //3. 给用户一个提示！
        //1. 获取异常的信息
        String message = e.getMessage();

        //2. 判定 如果是重复性异常，那么获取具体的原因，然后告诉页面
        if(message.contains("Duplicate entry")){
            String value = message.split(" ")[2];
            return R.error(value + " ，已存在！");
        }

        //如果不是，也告诉页面未知错误！
        return R.error("未知错误！");
    }


    //处理自定义的异常
    @ExceptionHandler(CustomException.class)
    public R handleCustomException(CustomException e){
        return R.error(e.getMessage());
    }

}
